/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.biblioteca.bl;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dsw2.biblioteca.dao.CategoriaDeLibroDaoLocal;
import mx.its.dsw2.biblioteca.dao.LibroDaoLocal;
import mx.its.dsw2.biblioteca.enumeracion.estadoTransaccion;
import mx.its.dsw2.biblioteca.modelo.Categoria;
import mx.its.dsw2.biblioteca.modelo.CategoriaDeLibro;
import mx.its.dsw2.biblioteca.modelo.Libro;

/**
 *
 * @book franciscojavier
 */
@Stateless
public class LibroBl implements LibroBlLocal {
    @EJB
    private CategoriaDeLibroDaoLocal categoriaDeLibroDao;
    @EJB
    private LibroDaoLocal libroDao;
    

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public estadoTransaccion Register(Libro book,List<Categoria> categories) {
        if(libroDao.findDuplicity(book)){
           return estadoTransaccion.INCOMPLETO;
       }else{
           libroDao.create(book);
           for(Categoria c: categories){
               CategoriaDeLibro cdl=new CategoriaDeLibro();
               cdl.setIdCategoria(c);
               cdl.setIdLibro(book);
               categoriaDeLibroDao.create(cdl);
           }
           return estadoTransaccion.COMPLETO;
       }
        
    }

    @Override
    public estadoTransaccion Modify(Libro book, List<Categoria> lista) {
        libroDao.edit(book);
        List<CategoriaDeLibro> old = book.getCategoriaDeLibroList();
        for(CategoriaDeLibro c : old){
            categoriaDeLibroDao.remove(c);
        }
        for(Categoria c: lista){
            CategoriaDeLibro cdl= new CategoriaDeLibro();
            cdl.setIdCategoria(c);
            cdl.setIdLibro(book);
            categoriaDeLibroDao.create(cdl);
        }
        return estadoTransaccion.COMPLETO;
      
          
        }
    

    @Override
    public estadoTransaccion delete(Libro book) {
        if(book.getId()==null || libroDao.find(book.getId())==null){
        return estadoTransaccion.INCOMPLETO;
        }
        else{
            libroDao.remove(book);
            return estadoTransaccion.COMPLETO;
        }
    }

    @Override
    public List<Libro> getAll() {
        return libroDao.findAll();
    }

   
    

}
